package com.study.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Scala01_RDD_Operator_Transform_1 {
  def main(args: Array[String]): Unit = {
    // 并发执行的前提是要有多线程
    val conf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val sc = new SparkContext(conf)

    // TODO 算子 - 转换 - map
    // [1,2] [3,4]
    val rdd = sc.makeRDD(List(1,2,3,4),2)

    // TODO 分区？在RDD进行转换时，旧的RDD与新RDD分区数量保持一致。而且数据扭转后默认分区不变
    // TODO 数据的执行顺序？分区内有序，分区间无序

    val rdd1: RDD[Int] = rdd.map(
      num =>{
        println("******** = "+ num)
        num
      }
    )

    val rdd2: RDD[Int] = rdd1.map(
      num =>{
        println("######## = "+ num)
        num
      }
    )
    /*
******** = 3
******** = 1
######## = 1
######## = 3
******** = 2
######## = 2
******** = 4
######## = 4
     */
    rdd2.saveAsTextFile("output")// 2个分区结果文件
    sc.stop()
  }

}
